"""
 llm lcel表达式 以及 StrOutputParser 解析器
"""
import os

from dotenv import load_dotenv
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 自动加载 .env 文件中的环境变量
load_dotenv()

# 简化初始化 - 不重复传递参数
#llm = ChatOpenAI(api_key=os.getenv("MODELSCOPE_OPENAI_API_KEY"), openai_api_base=os.getenv("MODELSCOPE_OPENAI_API_BASE"), model="Qwen/Qwen3-14B", streaming=True, temperature=0.7)
llm = ChatOpenAI(api_key=os.getenv("MODELSCOPE_OPENAI_API_KEY"), openai_api_base=os.getenv("MODELSCOPE_OPENAI_API_BASE"), model="Qwen/Qwen2.5-VL-7B-Instruct", streaming=True, temperature=0.7)

# 创建一个提示词模板  这里以对话模型的消息格式为例子，定义系统角色 和用户消息
prompt = ChatPromptTemplate.from_messages(
    [("system", "你是一个全球瞩目的it技术专家"), ("user", "{input}")]
)

# 创建一个字符串输出解析器
output = StrOutputParser()

# 基于  lcel表达式构建 llm链式  llm链上的东西都要实现runnable接口 从左到 右依次执行
chain = prompt | llm | output

# 调用 llm链条，并设置模板参数input  invoke会把调用参数传递给prompt提示模板，开始chain定义的步骤逐步执行
response = chain.invoke({"input": "写一篇langchain100字长的技术介绍！"})
print(response)
